#!/usr/bin/env python3
import sys
import os
import re
import subprocess
import argparse
import inspect
import urllib.request, urllib.error, urllib.parse
import json


def fail(message):
    file_name = __file__
    current_line_no = inspect.stack()[1][2]
    current_function_name = inspect.stack()[1][3]
    print("Failure in:", file_name, current_line_no, current_function_name)
    print(message)
    sys.exit(1)


def execute_command(command):
    try:
        print(" ".join(command))
        output = subprocess.check_output(command, text=True)
        if output:
            print(output)
    except subprocess.CalledProcessError as e:
        print(e.output)
        sys.exit(1)


def add_field(curl_command, form_key, form_value):
    curl_command.append("-F")
    curl_command.append("%s=%s" % (form_key, form_value))


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Precommit cleanup script.")
    parser.add_argument(
        "--file", required=True, help="used for starting a new version."
    )

    args = parser.parse_args()

    params_response = urllib.request.urlopen("https://debuglogs.org/").read()

    params = json.loads(params_response)

    upload_url = params["url"]
    upload_fields = params["fields"]

    upload_key = upload_fields.pop("key")
    upload_key = upload_key + os.path.splitext(args.file)[1]

    download_url = "https://debuglogs.org/" + upload_key
    print("download_url:", download_url)

    curl_command = ["curl", "-v", "-i", "-X", "POST"]

    # key must appear before other fields
    add_field(curl_command, "key", upload_key)
    for field_name in upload_fields:
        add_field(curl_command, field_name, upload_fields[field_name])

    add_field(curl_command, "content-type", "application/octet-stream")

    curl_command.append("-F")
    curl_command.append("file=@%s" % (args.file,))
    curl_command.append(upload_url)

    print(" ".join(curl_command))

    print("Running...")
    execute_command(curl_command)

    print("download_url:", download_url)
